/*lic*/
#ifndef __BSP_BASE_DEF_H__
#define __BSP_BASE_DEF_H__

#include <rtthread.h>
#include <stdint.h>
#include "hc32_ll.h"

/** !\brief 配置一些别名对象
*
*/

#define LED_RUN_PORT GPIO_PORT_B
#define LED_RUN_PIN GPIO_PIN_10

#define RTC_INT_PORT GPIO_PORT_A
#define RTC_INT_PIN GPIO_PIN_10

#define RN7326E_INT_PORT GPIO_PORT_B
#define RN7326E_INT_PIN GPIO_PIN_06

#define RN7326E_RST_PORT GPIO_PORT_B
#define RN7326E_RST_PIN GPIO_PIN_07

#define RESET_PORT GPIO_PORT_B
#define RESET_PIN GPIO_PIN_11

// 毫秒计数
extern uint32_t ms_cnt;

// 状态控制及读取
#define STATU_SET(x, y) x |= (y)
#define STATU_RESET(x, y) x &= ~(y)
#define STATU_GET(x, y) ((x & y) == y)
#define STATU_GET_NOT(x, y) ((x & y) == 0x00)

//I2C结构体
/**
 * @brief I2c communication mode enum
 */
typedef enum {
  GET = 0U,
  POST = 1U,
} Transport_Type_Def;
typedef enum {
  REQUEST = 0U,
  RESPONSE = 1U,
} Transport_Methon_Def;

typedef struct __Tag_I2c_Data_Task_Def {
  char name[16];
  Transport_Type_Def transport_mode;           /*!< I2C 通信模式，读还是写*/
  Transport_Methon_Def package_transport_mode; /* 当前包传输方向 */
  uint16_t send_data_len;                      /*!< I2C 发送长度*/
  uint16_t receive_data_len;                   /*!< I2C 接收长度*/
  uint16_t send_translate_index;               /*!< I2C 发送数据指针索引*/
  uint16_t receive_translate_index;            /*!< I2C 接收数据指针索引*/
  struct rt_mutex port_lock;                 /*!< I2C 端口状态，忙碌还是空闲*/
  uint8_t data_buf[64];                        /*!< I2C 数据缓冲区*/
  struct rt_semaphore i2c_sem;                 /* 发送中断信号 */
} I2c_Data_Task_Def;
//I2C结构体

// 外部RTC状态在rtc自己的头文件里
// RTC任务控制结构体
typedef struct __Tag_Rtc_Ctrl_Task_Def {
  // 绑定状态，确定i2c4的运行状态
  struct rt_semaphore rtc_sem;
  CM_I2C_TypeDef *cm_i2c;
  I2c_Data_Task_Def *i2c_ctrl_obj;
  uint8_t arloie_try;  /* 总线仲裁失败次数 */
  uint8_t ext_rtc_status; /* 外部RTC状态 */
	struct rt_semaphore ext_rtc_start_intc; /* 外部RTC中断，秒中断，起始 */
	struct rt_semaphore ext_rtc_half_intc; /* 外部RTC中断，秒中断，半秒 */
} Rtc_Ctrl_Task_Def;

#endif /* __BSP_BASE_DEF_H__ */

/*eof*/
